package com.chzc.sys.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.chzc.po.Role;
import com.chzc.sys.mapper.provider.RoleProvider;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * <p>
 * 角色信息表 Mapper 接口
 * </p>
 *
 * @author CV大魔王
 * @since 2021-05-24
 */
@Mapper
public interface RoleMapper extends BaseMapper<Role> {

    /**
     * 根据用户id查询角色权限码集合
     * @param userId 用户id
     * @return 角色权限码集合
     */
    @Select("SELECT sys_role.name " +
            "FROM sys_role JOIN sys_user_role on sys_role.id = sys_user_role.role_id " +
            "WHERE sys_user_role.user_id = #{userId}")
    List<String> findRoleCodeListByUserId(String userId);


    /**
     * 根据用户id查询角色信息
     * @param userId 用户id
     * @return 角色权限码集合
     */
    @Select("SELECT sys_role.id,sys_role.name,sys_role.remark " +
            "FROM sys_role JOIN sys_user_role on sys_role.id = sys_user_role.role_id " +
            "WHERE sys_user_role.user_id = #{userId}")
    List<Role> findRoleListByUserId(String userId);

    /**
     * 通过角色 id 删除角色菜单关系表数据
     * @param roleId 角色id
     * @return
     */
    @Delete("DELETE FROM sys_role_menu WHERE role_id = #{roleId}")
    boolean deleteRoleMenuByRoleId(@Param("roleId") String roleId);

    /**
     * 根据角色id查询此角色拥有的权限菜单 ids
     * @param id 角色id
     * @return 菜单 id 集合
     */
    @Select("SELECT menu_id FROM sys_role_menu WHERE role_id = #{id}")
    List<String> findMenuIdsById(@Param("id") String id);


    /**
     * 新增角色菜单权限数据到 sys_role_menu
     * @param roleId 角色id
     * @param menuIds 菜单ids集合
     * @return 逻辑值，添加是否成功
     */
    @InsertProvider(type = RoleProvider.class,method = "saveRoleMenu")
    boolean saveRoleMenu(@Param("roleId") String roleId, @Param("menuIds") List<String> menuIds);
}
